﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using GestionePolveriLib.BL;
using GestionePolveriLib.Facades;

namespace GestionePolveri2
{
    public partial class PrenotazioneManager : Form
    {
        private Polvere m_polvere = null;

        public Polvere Polvere
        {
            get { return m_polvere; }
            set 
            { 
                m_polvere = value;

                if (m_polvere != null)
                {
                    this.lblCodicePolvere.Text = string.Format("Codice Polvere: {0}", m_polvere.CodicePolvere);
                    this.lblDescrizione.Text = string.Format("Descrizione: {0}", m_polvere.Descrizione);
                    this.lblFamiglia.Text = string.Format("Famiglia: {0}", m_polvere.FamiglieColori);
                    this.lblFornitore.Text = string.Format("Fornitore: {0}", m_polvere.Fornitore.Descrizione);
                    this.lblGiacenza.Text = string.Format("Q. Disponibile (Kg.): {0:N}", m_polvere.QuantitaDisponibile);
                }
            }
        }

        public PrenotazioneManager()
        {
            InitializeComponent();

            this.btnOk.Click += new EventHandler(btnOk_Click);
        }

        public void Initialize()
        {
            System.Security.Principal.IPrincipal m_operatore = System.Threading.Thread.CurrentPrincipal;
            string[] roles = System.Web.Security.Roles.GetRolesForUser(m_operatore.Identity.Name);

            this.lblUtente.Text = string.Format("Utente: {0}", m_operatore.Identity.Name);
        }

        void btnOk_Click(object sender, EventArgs e)
        {
            //PrenotazioniFacade prnf = new PrenotazioniFacade();
            //List<Prenotazione> prn = prnf.Get(x => x.ID == 3 && x.Note.Contains("prelievo"));

            bool m_nonPrenotabile = false;
            //LottoNCFacade lf = new LottoNCFacade();
            //List<Lotto> m_lotti = lf.GetLotti(this.Polvere.ID, true);
            //if ((m_lotti != null) && (m_lotti.Count > 0))
            //{
            //    m_nonPrenotabile = true;
            //}

            double m_quantitaPrenotata = double.Parse(!string.IsNullOrWhiteSpace(this.dynNumQuantitaPrenotata.Text) ? this.dynNumQuantitaPrenotata.Text : "0");

            if (m_quantitaPrenotata > m_polvere.QuantitaDisponibile)
            {
                m_nonPrenotabile = true;
            }

            if (!m_nonPrenotabile)
            {
                System.Security.Principal.IPrincipal m_operatore = System.Threading.Thread.CurrentPrincipal;
                OperatoriFacade opf = new OperatoriFacade();
                Operatore m_operatoreBL = opf.GetOperatore(m_operatore.Identity.Name);

                //double m_quantitaPrenotata = double.Parse(!string.IsNullOrWhiteSpace(this.dynNumQuantitaPrenotata.Text) ? this.dynNumQuantitaPrenotata.Text : "0");
                string m_note = this.txtNote.Text;

                Prenotazione oi = new Prenotazione();
                oi.Data = DateTime.Now;
                oi.IDOperatore = m_operatoreBL.ID;
                oi.IDPolvere = this.Polvere.ID;
                oi.Note = m_note;
                oi.Tipo = OperationTypes.Prenotazione;
                oi.Quantita = m_quantitaPrenotata;
                oi.IsAnnullata = false;

                this.Polvere.QuantitaImpegnata = m_quantitaPrenotata;

                PrenotazioniFacade prf = new PrenotazioniFacade();
                prf.Add(oi);
            }
            else
            {
                MessageBox.Show("Prenotazione Non Effettuata. La quantità richiesta è maggiore di quella disponibile.",
                                        "Gestione Polveri", MessageBoxButtons.OK, MessageBoxIcon.Information);
                this.DialogResult = System.Windows.Forms.DialogResult.Cancel;
            }

        }
    }
}
